package main
import (
	"fmt"
)
//channel 与 goroutine 配合使用！
/*
要求如下：
1、开启一个writeData协程，向管道中intchan写入50个数据
2、开启一个readData协程，从管道intChan中读取writeData写入的数据
3、注意：writeData和readData操作的是同一个管道
4、主线程需要等待两个协程完成工作后才能退出【channel】
*/
//思路：利用两个管道解决，一个用来读写，一个用来做退出管道（写入一个值，并且关闭管道），主线程读 退出管道，读完才结束，没有就等着
func main(){
	intchan := make(chan int,50)
	exitchan := make(chan bool,5)
	go writeData(intchan)  //跑协程
	go readData(intchan,exitchan)
	//可以用time.Sleep来让主线程等协程，但是不是我们想要的，如下才是
	for v := range exitchan{ //如果管道没东西他就会等着
		fmt.Println("协程跑完了吗? ",v)
	}
}

func writeData(intchan chan int){
	for i:=1;i<=50;i++{
		intchan <- i
		fmt.Println("writeData :",i)
	}	
	close(intchan)   //写完就关闭，不影响读数据
}

func readData(intchan chan int,exitchan chan bool){
	for {
		v,ok:= <- intchan
		if !ok{
			break  //读不出数据了就退出
		} 
		fmt.Println("readData :",v)
	}
	exitchan <- true
	close(exitchan)
}